﻿Imports System.Data.SqlClient
Imports System.Security.Cryptography
Imports System
Imports System.Text
Public Class frmOficialesCredito
    Dim Transac As Integer
    Private Sub btnNuevoOficial_Click(sender As Object, e As EventArgs) Handles btnNuevoOficial.Click
        Me.gboDatosOficial.Enabled = True
        Me.btnNuevoOficial.Enabled = False
        Limpiar()
        Transac = 1
        'Dim instancia As MD5
    End Sub

    Private Sub btnGuardarOficial_Click(sender As Object, e As EventArgs) Handles btnGuardarOficial.Click
        If Transac = 1 Then
            GuardarNuevoOficial()
        ElseIf Transac = 2 Then
            ActualizarOficial()
        End If
    End Sub

    Private Sub Limpiar()
        Me.txtNumIdentidad.EditValue = Nothing
        Me.txtNombre.EditValue = Nothing
        Me.txtUsuario.EditValue = Nothing
        Me.txtPass1.EditValue = Nothing
        Me.txtPass2.EditValue = Nothing
        Me.OficialCreditoTableAdapter1.Fill(Me.MegastoreDataSet1.OficialCredito)
    End Sub

    Private Sub GuardarNuevoOficial()
        If Me.txtNumIdentidad.EditValue <> Nothing And Me.txtNombre.EditValue <> Nothing And Me.txtUsuario.EditValue <> Nothing And Me.txtPass1.EditValue <> Nothing And Me.txtPass2.EditValue <> Nothing Then
            If Me.txtPass1.EditValue = Me.txtPass2.EditValue Then
                Dim PassHasheado = getMD5Hash(Me.txtPass1.EditValue)
                'Todo está bien, vamos a proceder a guardar al oficial de crédito a traves de una consulta en un TableAdapter.
                Me.OficialCreditoTableAdapter1.InsertarOficialCredito(Me.txtNumIdentidad.EditValue, Me.txtNombre.EditValue, Me.txtUsuario.EditValue, PassHasheado, Me.cboNivelSeguridad.EditValue)
                MessageBox.Show("Se ha ingresado correctamente el oficial al sistema", varTitulo, MessageBoxButtons.OK, MessageBoxIcon.Information)
                Limpiar()
            Else
                'Las contraseñas no coinciden
                MessageBox.Show("ERROR: Las contraseñas introducidas no coinciden, intentelo de nuevo", varTitulo, MessageBoxButtons.OK, MessageBoxIcon.Error)
                Me.txtPass1.EditValue = Nothing
                Me.txtPass2.EditValue = Nothing
                Me.txtPass1.BackColor = Color.LemonChiffon
                Me.txtPass2.BackColor = Color.LemonChiffon
            End If
        Else
            'Mostrar error e informacion acerca de que controles estan vacios
            If Me.txtNumIdentidad.EditValue = Nothing Then
                Me.txtNumIdentidad.BackColor = Color.LemonChiffon
                MessageBox.Show("Ingrese un número de identidad", varTitulo, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
                Me.txtNumIdentidad.Focus()
            ElseIf Me.txtNombre.EditValue = Nothing Then
                Me.txtNombre.BackColor = Color.LemonChiffon
                MessageBox.Show("Ingrese el nombre del oficial de crédito", varTitulo, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
                Me.txtNombre.Focus()
            ElseIf Me.txtUsuario.EditValue = Nothing Then
                Me.txtUsuario.BackColor = Color.LemonChiffon
                MessageBox.Show("El ingrese un nombre de usuario", varTitulo, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
                Me.txtUsuario.Focus()
            ElseIf Me.txtPass1.EditValue = Nothing Then
                Me.txtPass1.BackColor = Color.LemonChiffon
                MessageBox.Show("Escriba una contraseña para la cuenta", varTitulo, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
                Me.txtPass1.Focus()
            ElseIf Me.txtPass2.EditValue = Nothing Then
                Me.txtPass2.BackColor = Color.LemonChiffon
                MessageBox.Show("Verfique la contraseña ingresada", varTitulo, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
                Me.txtPass2.Focus()
            End If
        End If
    End Sub

    Private Sub txtNumIdentidad_EditValueChanged(sender As Object, e As EventArgs) Handles txtNumIdentidad.EditValueChanged
        Me.txtNumIdentidad.BackColor = Color.White
    End Sub

    Private Sub txtUsuario_EditValueChanged(sender As Object, e As EventArgs) Handles txtUsuario.EditValueChanged
        Me.txtUsuario.BackColor = Color.White
    End Sub

    Private Sub txtNombre_EditValueChanged(sender As Object, e As EventArgs) Handles txtNombre.EditValueChanged
        Me.txtNombre.BackColor = Color.White
    End Sub

    Private Sub txtPass1_EditValueChanged(sender As Object, e As EventArgs) Handles txtPass1.EditValueChanged
        Me.txtPass1.BackColor = Color.White
    End Sub

    Private Sub txtPass2_EditValueChanged(sender As Object, e As EventArgs) Handles txtPass2.EditValueChanged
        Me.txtPass2.BackColor = Color.White
    End Sub

    Private Sub frmOficialesCredito_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        'TODO: esta línea de código carga datos en la tabla 'MegastoreDataSet1.NivelSeguridad' Puede moverla o quitarla según sea necesario.
        Me.NivelSeguridadTableAdapter.Fill(Me.MegastoreDataSet1.NivelSeguridad)
        Me.OficialCreditoTableAdapter1.Fill(Me.MegastoreDataSet1.OficialCredito)
    End Sub

    Private Sub btnActualizarOficial_Click(sender As Object, e As EventArgs) Handles btnActualizarOficial.Click
        ObtenerDatosOficial()
        Transac = 2
    End Sub

    Private Sub ObtenerDatosOficial()
        Try
            If varConexionMegaStore.State = ConnectionState.Open Then
                varConexionMegaStore.Close()
            End If
            varConexionMegaStore.Open()
            Dim RnpOfi As String = Me.gvListado.GetRowCellValue(gvListado.FocusedRowHandle, "RnpOficialCredito")

            Dim sql As String = String.Format("SELECT * FROM OficialCredito WHERE RnpOficialCredito = '{0}'", RnpOfi)
            Dim cmd As New SqlCommand(sql, varConexionMegaStore)
            Dim reader As SqlDataReader = cmd.ExecuteReader

            If reader.Read Then
                Me.txtNumIdentidad.EditValue = reader.Item("RnpOficialCredito").ToString
                Me.txtNombre.EditValue = reader.Item("NombreOficialCredito").ToString
                Me.txtUsuario.EditValue = reader.Item("Usuario").ToString
                Me.gboDatosOficial.Enabled = True
                Me.cboNivelSeguridad.EditValue = reader.Item("IdNivelSeguridad").ToString
            Else
                Me.txtNumIdentidad.EditValue = reader.Item("RnpOficialCredito").ToString
                Me.txtNombre.EditValue = reader.Item("NombreOficialCredito").ToString
                Me.txtUsuario.EditValue = reader.Item("Usuario").ToString

                MessageBox.Show("No se ha encontrado este oficial", varTitulo, MessageBoxButtons.OK, MessageBoxIcon.Error)

                reader.Close()
                varConexionMegaStore.Close()

            End If
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub

    Private Sub ActualizarOficial()
        Try
            If Me.txtPass1.EditValue = Me.txtPass2.EditValue Then
                Dim PassHasheado = getMD5Hash(Me.txtPass1.EditValue)
                'Todo está bien, vamos a proceder a guardar al oficial de crédito a traves de una consulta en un TableAdapter.
                Me.OficialCreditoTableAdapter1.ActualizarOficialCredito(Me.txtNombre.EditValue, Me.txtUsuario.EditValue, PassHasheado, Me.txtNumIdentidad.EditValue, Me.cboNivelSeguridad.EditValue)
                MessageBox.Show("Se han actualizado correctamente los datos del oficial en el sistema", varTitulo, MessageBoxButtons.OK, MessageBoxIcon.Information)
                Limpiar()
            Else
                'Las contraseñas no coinciden
                MessageBox.Show("ERROR: Las contraseñas introducidas no coinciden, intentelo de nuevo", varTitulo, MessageBoxButtons.OK, MessageBoxIcon.Error)
                Me.txtPass1.EditValue = Nothing
                Me.txtPass2.EditValue = Nothing
                Me.txtPass1.BackColor = Color.LemonChiffon
                Me.txtPass2.BackColor = Color.LemonChiffon
            End If
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub

    Private Sub btnEliminar_Click(sender As Object, e As EventArgs) Handles btnEliminar.Click
        EliminarOficial()
    End Sub

    Private Sub EliminarOficial()
        Dim RnpOfi As String = Me.gvListado.GetRowCellValue(gvListado.FocusedRowHandle, "RnpOficialCredito")
        Dim resp As Object = MessageBox.Show("¿Está seguro de eliminar a este oficial?", varTitulo, MessageBoxButtons.YesNo, MessageBoxIcon.Question)
        If resp = vbYes Then
            Me.OficialCreditoTableAdapter1.EliminarOficial(RnpOfi)
            Limpiar()
        End If
    End Sub

    Private Function getMD5Hash(ByVal input As String) As String
        Dim md5Hasher As MD5 = MD5.Create()
        Dim data As Byte() = md5Hasher.ComputeHash(Encoding.Default.GetBytes(input))
        Dim sBuilder As New StringBuilder()
        Dim i As Integer

        For i = 0 To data.Length - 1
            sBuilder.Append(data(i).ToString("x2"))
        Next i

        Return sBuilder.ToString()

    End Function
End Class